রুবি একটি অবজেক্ট-অরিয়েন্টেড প্রোগ্রামিং ভাষা, এবং এতে Modules একটি গুরুত্বপূর্ণ ধারণা। Modules হলো একটি কোডের সংকলন যা মেথডস, কনস্ট্যান্টস, এবং ভ্যারিয়েবলস ধারণ করতে পারে, কিন্তু ক্লাস নয়। মূলত, মডিউলগুলি কোড পুনঃব্যবহারযোগ্যতা এবং স্কেলেবিলিটি উন্নত করতে ব্যবহৃত হয়।
রুবি ভাষায় মডিউল ব্যবহারের মাধ্যমে আপনি একাধিক ক্লাসে ফাংশনালিটি শেয়ার করতে পারেন এবং এটি Mixin (মিক্সিন) এর মতো কাজ করে।
Modules এর মৌলিক ধারণা
মডিউল হল একটি কোড ব্লক যা একাধিক ক্লাসে শেয়ার করা যায়। মডিউলগুলি আপনাকে কোড পুনঃব্যবহার করতে এবং লজিক্যাল গ্রুপিং করতে সহায়তা করে। আপনি যখন একাধিক ক্লাসে একই ফাংশনালিটি শেয়ার করতে চান, তখন মডিউল ব্যবহার করতে পারেন।
মডিউল তৈরি করা
মডিউল তৈরি করতে module কিওয়ার্ড ব্যবহার করা হয় এবং এর মধ্যে মেথড ও কনস্ট্যান্ট রাখা যায়। একটি মডিউল কখনোই ইনস্ট্যান্স তৈরি করা যায় না, এটি শুধু ফাংশনালিটি শেয়ার করতে ব্যবহৃত হয়।
সিনট্যাক্স:
module ModuleName
# মেথড এবং কনস্ট্যান্টস এখানে থাকবে
endউদাহরণ:
module Greeting
def hello
puts "Hello, World!"
end
endএখানে, Greeting একটি মডিউল যা একটি hello মেথড ধারণ করে।
Modules ব্যবহার এবং Mixin
মডিউল একটি ক্লাসে অন্তর্ভুক্ত করতে include কিওয়ার্ড ব্যবহার করা হয়। এর মাধ্যমে ক্লাসে মডিউলের মেথডস এবং কনস্ট্যান্টস ইনহেরিট করা যায়। এটি মডিউলকে ক্লাসে Mixin হিসাবে ব্যবহার করার একটি পদ্ধতি।
উদাহরণ:
module Greeting
def hello
puts "Hello, World!"
end
end
class Person
include Greeting # Greeting মডিউলকে Person ক্লাসে অন্তর্ভুক্ত করা
end
person = Person.new
person.hello # আউটপুট: "Hello, World!"এখানে, Person ক্লাসে Greeting মডিউল ইনক্লুড করার মাধ্যমে hello মেথডটি ব্যবহার করা হয়েছে। এখন, Person ক্লাসের ইনস্ট্যান্স hello মেথডটি ব্যবহার করতে সক্ষম।
Modules এর সুবিধা
- কোড পুনঃব্যবহার: একাধিক ক্লাসে একই কোড শেয়ার করতে মডিউল ব্যবহৃত হয়, যা কোডের পুনঃব্যবহারযোগ্যতা বৃদ্ধি করে।
- নামকরণের সংঘর্ষ রোধ: মডিউল দ্বারা আপনি আপনার কোডের নামকরণের সংঘর্ষ এড়িয়ে চলতে পারেন, কারণ মডিউল নামের সাথে ক্লাসের নাম আলাদা থাকে।
- লজিক্যাল গ্রুপিং: মডিউল ব্যবহার করে সম্পর্কিত মেথড এবং কনস্ট্যান্টস একত্রে গ্রুপ করা সম্ভব।
Modules এর অন্যান্য বৈশিষ্ট্য
- Module Method (মডিউল মেথড): মডিউলগুলির নিজস্ব মেথড থাকতে পারে, যা ক্লাসের মধ্যে ইনক্লুড করার পর সেই মেথডগুলিকে ব্যবহার করা যায়।
উদাহরণ:
module MathHelper
def add(a, b)
a + b
end
end
class Calculator
include MathHelper
end
calc = Calculator.new
puts calc.add(2, 3) # আউটপুট: 5এখানে, MathHelper মডিউল একটি add মেথড ধারণ করে, এবং এটি Calculator ক্লাসে ইনক্লুড করা হয়েছে।
- Constants in Modules (মডিউলে কনস্ট্যান্টস): মডিউলে কনস্ট্যান্টও রাখা যায়, যেগুলি সাধারণত একবার সেট করার পর পরিবর্তন করা যায় না।
উদাহরণ:
module MathHelper
PI = 3.14159
end
puts MathHelper::PI # আউটপুট: 3.14159এখানে, MathHelper মডিউলে PI কনস্ট্যান্ট ব্যবহার করা হয়েছে।
- Nested Modules (নেস্টেড মডিউলস): রুবিতে মডিউলগুলিকে আরেকটি মডিউলের মধ্যে রাখা যেতে পারে, যাকে নেস্টেড মডিউল বলে।
উদাহরণ:
module OuterModule
module InnerModule
def greet
puts "Hello from InnerModule!"
end
end
end
class MyClass
include OuterModule::InnerModule
end
obj = MyClass.new
obj.greet # আউটপুট: "Hello from InnerModule!"এখানে, InnerModule মডিউলটি OuterModule মডিউলের ভিতরে আছে এবং এটি MyClass ক্লাসে ইনক্লুড করা হয়েছে।
Module vs Class
- মডিউল: মডিউল কখনোই ইনস্ট্যান্স তৈরি করতে পারে না, এটি শুধুমাত্র ফাংশনালিটি শেয়ার করতে ব্যবহৃত হয়।
- ক্লাস: ক্লাসে ইনস্ট্যান্স তৈরি করা যায় এবং এটি অবজেক্টের জন্য ব্লুপ্রিন্ট হিসেবে কাজ করে। ক্লাসে মেথড এবং অ্যাট্রিবিউটস (ভ্যারিয়েবল) রাখা যায়, যা অবজেক্টের জন্য ব্যবহৃত হয়।
Module Method and Class Method (মডিউল মেথড এবং ক্লাস মেথড)
- মডিউল মেথডগুলি এক্সটেনশন হিসেবে ব্যবহৃত হয় এবং কখনো ইনস্ট্যান্সের জন্য কাজ করে না, কিন্তু
selfব্যবহার করে মডিউল মেথডকে ক্লাসের মধ্যে ব্যবহার করা যায়।
উদাহরণ:
module MathHelper
def self.multiply(a, b)
a * b
end
end
puts MathHelper.multiply(2, 3) # আউটপুট: 6এখানে, মডিউল মেথড self.multiply হিসেবে ডিফাইন করা হয়েছে, যা মডিউলের নামের মাধ্যমে কল করা হয়েছে।
সারসংক্ষেপ
- Modules হল কোডের ব্লক যা একাধিক ক্লাসে ফাংশনালিটি শেয়ার করতে ব্যবহৃত হয়।
- মডিউলগুলি কোড পুনঃব্যবহার করতে সহায়তা করে এবং Mixin হিসেবে কাজ করে।
- রুবিতে মডিউল ব্যবহার করার জন্য
moduleকিওয়ার্ড ব্যবহার করা হয় এবং মডিউল ইনক্লুড করতেincludeকিওয়ার্ড ব্যবহার করা হয়। - মডিউল ক্লাসের মতো ইনস্ট্যান্স তৈরি করতে পারে না, তবে constants এবং methods ধারণ করতে পারে, যা ক্লাসে শেয়ার করা যায়।
মডিউল ব্যবহারের মাধ্যমে আপনি কোডের মডুলারিটি এবং স্কেলেবিলিটি উন্নত করতে পারেন।
Read more